package org.gushi.algorithm.a05;

/**
 *
 * 链接：https://www.pdai.tech/md/algorithm/alg-sort-x-insert.html
 *
 * 直接插入排序(Straight Insertion Sort)的基本思想是: 把n个待排序的元素看成为一个有序表和一个无序表。
 * 开始时有序表中只包含1个元素，无序表中包含有n-1个元素，排序过程中每次从无序表中取出第一个元素，将它插入到有序表中的适当位置，使之成为新的有序表，重复n-1次可完成排序过程。
 * @param <E>
 */
public class InsertionSort<E extends Comparable<E>> {

    private E[] list;


    public InsertionSort(E[] list) {
        this.list = list;
    }


    public E[] sort() {

        for (int i = 1; i < list.length; i++) {
            E element = list[i];
            for (int j = 0; j < i; j++) {//有序的数组
                int crIndex = i;
                if (element.compareTo(list[j]) < 0) {
                    while (j<crIndex){//向右挪动
                         list[crIndex]=list[--crIndex];
                    }
                    list[j] = element;
                    break;
                }
            }
        }

        return list;
    }

}
